# -*- coding: utf-8 -*-
'''
@authors 12551 Pedro Santos && 12552 Emanuel Teixeira
@date 8 de novembro de 2013
@obs: Criação de uma base de dados referente aos
resultados obtidos nas consultas.
'''
import xlrd
import sqlite3

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

base = declarative_base()
db_session = scoped_session(sessionmaker())

class Dadostabela(base):
    '''
    Código baseado no tutorial de sqlalchemy
    '''
    __tablename__ = "dados"
    id = Column(Integer, primary_key=True)
    InstituicaoEnsino = Column(String(50))
    Curso = Column(String(50))
    Vagas = Column(String(10))
    Colocados = Column(String(10))
    Sobrantes = Column(String(10))
    

def init_sqlalchemy(xls_name):
        '''
        Método que cria uma base de dados, colocando as
        instituições, os cursos, as vagas, o numero de colocados
        e as vagas sobrantes ordenados em colunas.
        '''
        excel = xlrd.open_workbook(xls_name)
        global basedados
        directoria = 'sqlite:///database.db'
        basedados = create_engine(directoria, echo=True)
        db_session.configure(bind=basedados, autoflush=False, expier_on_commit=False)
        base.metadata.drop_all(basedados)
        base.metadata.create_all(basedados)

        folha_excel = excel.sheet_by_name("Resultados")
        inst_ensino_num_col = 2
        curso_num_col = 3
        vagas_num_col = 5
        colocados_num_col = 6
        sobrantes_num_col = 8
        basedados.execute(
                Dadostabela.__table__.insert(),
                [{"InstituicaoEnsino": ((folha_excel.cell(line, inst_ensino_num_col).value).split(' -')[0]),
                "Curso": folha_excel.cell(line, curso_num_col).value,
                "Vagas": folha_excel.cell(line, vagas_num_col).value,
                "Colocados": folha_excel.cell(line, colocados_num_col).value,
                "Sobrantes": folha_excel.cell(line, sobrantes_num_col).value} for line in range(3, folha_excel.nrows - 2)]
                )